﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;

namespace LGPeWJNM.DataAccessLayer
{
    public class Resultado
    {
        [XmlIgnore]
        public IEnumerable<BaseClasses.Point> Mediana { get; set; }

        [XmlIgnore]
        public IEnumerable<IEnumerable<BaseClasses.ICliente>> Clusterizacao { get; set; }

        [XmlIgnore]
        public IEnumerable<IEnumerable<BaseClasses.ICliente>> Roteirizacao { get; set; }

        [XmlIgnore]
        public IEnumerable<IEnumerable<BaseClasses.ICliente>> Otimizacao { get; set; }

        [XmlArray("Mediana")]
        public BaseClasses.Point[] MedianaXml
        {
            get { return Mediana != null ? Mediana.ToArray() : null; }
            set { Mediana = new List<BaseClasses.Point>(value); }
        }

        [XmlArray("Clusterizacao")]
        public BaseClasses.Cliente[][] ClusterizacaoXml
        {
            get { return Clusterizacao != null ? Clusterizacao.Select(s => s.Cast<BaseClasses.Cliente>().ToArray()).ToArray() : null; }
            set { Clusterizacao = new List<List<BaseClasses.ICliente>>(value.Select(s => new List<BaseClasses.ICliente>(s.Cast<BaseClasses.ICliente>()))); }
        }

        [XmlArray("Roteirizacao")]
        public BaseClasses.Cliente[][] RoteirizacaoXml
        {
            get { return Roteirizacao != null ? Roteirizacao.Select(s => s.Cast<BaseClasses.Cliente>().ToArray()).ToArray() : null; }
            set { Roteirizacao = new List<LinkedList<BaseClasses.ICliente>>(value.Select(s => new LinkedList<BaseClasses.ICliente>(s.Cast<BaseClasses.ICliente>()))); }
        }

        [XmlArray("Otimizacao")]
        public BaseClasses.Cliente[][] OtimizacaoXml
        {
            get { return Otimizacao != null ? Otimizacao.Select(s => s.Cast<BaseClasses.Cliente>().ToArray()).ToArray() : null; }
            set { Otimizacao = new List<LinkedList<BaseClasses.ICliente>>(value.Select(s => new LinkedList<BaseClasses.ICliente>(s.Cast<BaseClasses.ICliente>()))); }
        }
    }
}